﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Kolekcja
{
    public class Kolekcja<T> : IEnumerable<T> where T : IComparable<T> 
    {
        private List<T> lista = new List<T>();

        public int Ilosc
        {
            get
            {
                return lista.Count;
            }
        }

        public T Max 
        {
            get 
            {
                if (lista.Count == 0)
                    return default(T);
                else
                    return lista.Max<T>();
            }
        }

        public T Min 
        {
            get 
            {
                if (lista.Count == 0)
                    return default(T);
                else
                    return lista.Min<T>();
            }
        }

        public void Add(T element)
        {
            lista.Add(element);
        }

        public void Remove(T element) 
        {
            lista.Remove(element);
        }

        public void RemoveAt(int indeks) 
        {
            try
            {
                lista.RemoveAt(indeks);
            }
            catch (IndexOutOfRangeException e) 
            {
                Console.WriteLine("Nie ma takiego numeru!");
            }
        }

        public IEnumerator<T> GetEnumerator()
        {
            for (int i = 0; i < lista.Count; i++)
            {
                yield return lista[i];
            }
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        public IEnumerable<T> IteracjaMalejaco
        {
            get
            {
                for (int i = lista.Count - 1; i >= 0; i--)
                {
                    yield return lista[i];
                }
            }
        }

        public static bool operator <(Kolekcja<T>A, Kolekcja<T> B) 
        {
            if (A.Max.CompareTo(B.Min) < 0)
                return true;
            else
                return false;
        }

        public static bool operator >(Kolekcja<T> A, Kolekcja<T> B) 
        {
            if (A.Min.CompareTo(B.Max) >= 0)
                return true;
            else
                return false;
        }
    }
}
